\documentclass[12pt,a4paper]{article}
\usepackage[dutch]{babel}	
\usepackage{graphicx}
\usepackage{fancyhdr}
\graphicspath{{images/}}

\usepackage[top=2cm, bottom=2cm]{geometry}
\author{Pleun Willemsen en  Walter Ebbers }
\title{Documentatie Distributed Services \\ Enterprise Service Bus }
\date{\today\\v1.0}

\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage
\section*{Revisie geschiedenis}
\begin{tabular}{|p{2cm}|p{1cm}|p{6cm}|p{4cm}|}
\hline Datum & Versie & Omschrijving & Auteur \\ 
\hline 19-04-2012 & 0.1 & template gemaakt & Pleun Willemsen \\ 
\hline 19-04-2012 & 0.2 & Opdracht en Ontwikkelomgeving & Pleun Willemsen \\ 
\hline 19-04-2012 & 0.3 & Handleiding & Walter Ebbers \\ 
\hline 20-04-2012 & 0.4 & Persoonlijke bevindingen & Walter Ebbers, Pleun Willemsen \\ 
\hline 20-04-2012 & 0.5 & Verbeteringen en aanvullingen & Pleun Willemsen \\ 
\hline 20-04-2012 & 1.0 & Versie voor oplevering & Pleun Willemsen \\ 
\hline
\end{tabular} 

\section*{Begrippen}
\begin{tabular}{|p{4cm}|p{9cm}|}
\hline Begrip & Uitleg: \\ 
\hline ESB & Enterprise Service Bus \\ 
\hline JMS & Java Message Service \\
\hline JPA & Java Peristence Api \\
\hline 
\end{tabular} 
\newpage

\section{Inleiding}
Dit document is bedoelt ter verslaglegging van de opdracht ESB van distributed services. In het verslag staan zaken als analyse, de client uitleg, de ESB uitleg met de bijbehorende flows en onze persoonlijke bevindingen. 
Dit document is bedoelt ter verslaglegging van de opdracht ESB van distributed services.

\subsection{Opdracht}
Voor het inmiddels welbekende [S]Aktiehuis moet de verwerking van bestellingen worden opgepakt.
Figuur 3 geeft dit schematisch weer.
De bestelservice heb je al gemaakt bij de opdracht Remote Services en / of Enterprise Applications.
Wat er nu moet gebeuren, is dat de bestelservice de bestelling in een message queue zet. Een
content-based router beslist dan op basis van de inhoud van de bestelling, of deze moet worden
doorgegeven aan groothandel A of groothandel B. Beide groothandels bieden hiervoor een webservice
aan. Na ontvangst van de bestelling stuurt de betreffende groothandel een bevestiging. Dit
gebeurt door een bericht op een tweede messagequeue van de [S]Aktiehuis ESB zetten. De berichten
van deze messagequeue moeten uiteindelijk worden omgezet naar een leesbaar bestand
(platte tekst; geen XML) op het filesysteem van de server van [S]Aktiehuis.
\\
\includegraphics[scale=0.6]{vb}


\newpage
\section{Analyse}
In de opdrachtomschrijving staat in grote lijnen beschreven hoe de applicatie er uit moet komen te zien. Onze analyse is dan ook gebaseerd op de opdrachtomschrijving.\\
We hebben gekozen voor een MuleSoft Enterprise Service Bus v3.2 omdat dit werd aangeraden door de docent en er leek veel voorbeeld materiaal beschikbaar te zijn, hebben we onderzocht. We zijn er ons van bewust dat deze versie nog wel in ontwikkeling is. (Zie 'Persoonlijke Bevindingen')\\
Verder maken we gebruik van de Apache ActiveMQ. Hier kunnen de berichten worden geplaatst op een queue en weer uitgelezen.

\newpage
\section{Ontwikkelomgeving}
Onze beide groothandels zijn twee EJB containers die draaien op een Opensource Community GlasshfishServer v3.1.2 en hebben verbinding met een Microsoft SQL Server 2008 R2 x64. De Enterprise Service Bus draait op een MuleServer Community v3.2.1. De client is een console application geschreven in java.\\
De ESB wordt ontwikkeld in MuleStudio v1.0.0.


\newpage
\subsection{Client}
De client is een java standalone console applicatie. Omdat de client niet ons hoofddoel is hebben we een map met producten gemaakt die overeenkomen met de producten uit de database. Denk aan productsoort, productID enz. De gebruiker kan een productID invoeren en dat wordt doorgestuurd naar de ESB (zie Gebruikershandleiding).\\
\\
De communicatie tussen client en ESB verloopt middels JMS. De client zet een bericht op de queue waar de ESB op luistert.

\newpage
\section{Enterprise Service Bus}
Voor de binnenkomende bestellingen op de ESB maken we gebruik van de volgende flow:\\\\
\includegraphics[scale=0.75]{incomingESB}\\\\
Het bericht dat binnenkomt vanuit de client is een bestelling. In deze bestelling staan een aantal waarden. 1 van de waarden is de productsoort. Via deze productsoort word de bestelling doorgestuurd na de juiste groothandel. Voor deze groothandels zijn er ook een aantal flows en die zijn te zien in de onderstaande secties.

\section{Groothandel A - Computerwinkel}
%Communicatie met DB
%Alleen productsoort Hardware zal hierheen geloodst worden
Via JMS wordt de bestelling doorgestuurd naar de message driven queue van de groothandel. Via de onmessage in de groothandel wordt de bestelling opgeslagen in de database. Als dit gebeurd is wordt er op een nieuwe queue een bevestiging gezet. Deze bevestiging wordt in mule opgevangen en weggeschreven naar de hardeschijf op de server.  Alleen producten met productsoort 'Hardware' worden bij deze groothandel afgeleverd.\\\\
\includegraphics[scale=1]{groothandelA}
\newpage
\section{Groothandel B - McDonalds}
Via JMS wordt de bestelling doorgestuurd naar de message driven queue van de groothandel. Via de onmessage in de groothandel wordt de bestelling opgeslagen in de database. Als dit gebeurd is wordt er op een nieuwe queue een bevestiging gezet. Deze bevestiging wordt in mule opgevangen en weggeschreven naar de hardeschijf op de server.  Alleen producten met productsoort 'McDonalds' worden bij deze groothandel afgeleverd.\\\\
\includegraphics[scale=1]{groothandelB}

\newpage
\section{Testcases}
Doordat we tijdens de ontwikkeling al tegen een aantal problemen aanliepen en deze wisten op te lossen hebben we de software al getest. Door dat de client ook werkt op de ESB is er aan te tonen dat de software goed met elkaar samenwerkt.


\newpage
\section{Gebruikershandleiding}
Om als gebruiker producten te kunnen bestellen word er aanbevolen het onderstaande door te lezen.
\subsection{Handleiding}
Als de client is opgestart verschijnt het volgende scherm.\\\\
\includegraphics[scale=1]{start}\\\\
Er wordt weergegeven welke producten aanwezig zijn en door middel van het invoeren van het productID kan men een product bestellen.\\\\
Na het invoeren van een productID dient er op enter gedrukt te worden. Bij een succesvolle bestelling verschijnt het onderstaande:\\\\
\includegraphics[scale=1]{besteld}
\newpage
Indien het opgegeven product niet bestaat wordt dit weergegeven zoals te zien is in het onderstaande scherm.\\\\
\includegraphics[scale=1]{nietgevonden}\\\\
Als men de applicatie wilt sluiten hoeft er alleen exit ingevoerd te worden en de applicatie wordt afgesloten met een melding zoals hieronder te zien is.\\\\
\includegraphics[scale=1]{afgesloten}\\\\

\newpage
\section{Persoonlijke bevindingen}
\subsection{Bevindingen Pleun Willemsen}
%Queue enzoo was duidelijk en makkelijk. SOAP werkt voor geen meter.. veel tijd verloren. de EJB client was even prutsen met Glasshfish imports ofzo

Ik was enthousiast na het volgen van het hoorcollege over ESB. Het was me duidelijk hoe het werkt en hoe het gebruikt moet worden. Eerst heb ik de demo's gevolgd, dit ging niet zonder slag of stoot. Maar na enig zoek- en vraagwerk had ik alle demo's draaiend.\\
Walter zou voor de EJB opdracht koppelen aan de ESB en ik de .NET Webservice. Mule heeft een component SOAP dus ik dacht dat moet makkelijk kunnen, want SOAP is toch gestandaardiseerd. Maar het werd niet wat. Daarom hebben we besloten om 2 EJB's te koppelen om toch de contentbased router aan het werk te zetten.\\
Ik ga op korte termijn nog niet met Mule ESB3 / MuleStudio werken. Het zit nog vol met fouten.\\
Samenwerking ging goed met Walter. Dit was helaas de laatste opdracht van middleware.


\subsection{Bevindingen Walter Ebbers}
Na het dilemma met JPA was er hoop op dat ESB beter zou gaan. In een aantal opzichten was dit ook het geval. In het begin was het gebruik van een queue in Mule best wel lastig. Maar na veel te focussen op de demo's werd dit uiteindelijk beter. Wat een groot nadeel was is dat we onze .net webservice niet aan de praat kregen. Hierdoor hebben we gebruik gemaakt van 2 instanties van onze EJB server uit de vorige opdracht. Verder was het gebruik van een choice een groot drama in het begin. Je moet goed weten hoe de expressions werken met de bijbehorende values. Nadat dit werkte was het heel makkelijk.

\newpage
\section{Bronnen}
\begin{itemize}
	\item MuleSoft.com - Ontwikkelaars van de MuleStudio
	\item Hoorcolleges Distributed Services
\end{itemize}

\end{document}
